package co.gov.medellin.ssti.sub.web.action;

import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import co.gov.medellin.ssti.sub.common.excepcion.SUBException;
import co.gov.medellin.ssti.sub.common.util.Utility;
import co.gov.medellin.ssti.sub.model.dao.exception.DAOException;
import co.gov.medellin.ssti.sub.model.service.AtributosService;
import co.gov.medellin.ssti.sub.model.service.RepBeneficioOtorgadoService;
import co.gov.medellin.ssti.sub.model.service.VflexService;
import co.gov.medellin.ssti.sub.model.vo.CondicionConsultaVO;
import co.gov.medellin.ssti.sub.model.vo.RepAtributoVO;
import co.gov.medellin.ssti.sub.model.vo.RepBeneficioOtorgadoVO;
import co.gov.medellin.ssti.sub.model.vo.RepEmpresaVO;
import co.gov.medellin.ssti.sub.web.form.RepDetEmpresaForm;

@Component
public class SeleccionCamposRepDetEmpresaAction extends Action {
	@Autowired
	AtributosService atributosServiceImpl2;
	@Autowired
	VflexService vflexServiceImpl2;
	@Autowired
	RepBeneficioOtorgadoService repBeneficioOtorgadoServiceImpl2;

	/**
	 * This is the main action called from the Struts framework.
	 * 
	 * @param mapping
	 *            The ActionMapping used to select this instance.
	 * @param form
	 *            The optional ActionForm bean for this request.
	 * @param request
	 *            The HTTP Request we are processing.
	 * @param response
	 *            The HTTP Response we are processing.
	 * @return
	 * @throws java.io.IOException
	 * @throws javax.servlet.ServletException
	 */
	@SuppressWarnings("unchecked")
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		HttpSession session = request.getSession();

		List<CondicionConsultaVO> lFiltrado;
		RepDetEmpresaForm formBean = (RepDetEmpresaForm) form;

		// criteria de busqueda.
		RepEmpresaVO repDetEmpresaVO = (RepEmpresaVO) session
				.getAttribute("criteriaRepDetEmpresa");
		formBean.setRepEmpresaVO(repDetEmpresaVO);

		if (request.getParameter("generar") != null) {
			formBean.setGenerar(request.getParameter("generar"));
		}

		formBean.setlEspecificos((Collection) session
				.getAttribute("listaAtrEspecificosRepDetEmpresa"));

		if (formBean.getOperacion() != null
				&& !formBean.getOperacion().equals(Utility.OP_GENERAR_REPORTE)) {
			// TODO: generar es null
			if (formBean.getGenerar() != null) {
				String strcodigo = (String) request.getParameter("generar");
				request.setAttribute("codsub", strcodigo);

				String strCodsubpro = "";
				String strCodSede = "";

				List<RepBeneficioOtorgadoVO> lbeneotorgado = new LinkedList<RepBeneficioOtorgadoVO>();
				lbeneotorgado = (List<RepBeneficioOtorgadoVO>) session
						.getAttribute("BeneficiosOtorgado");
				String posicion = request.getParameter("posicion");

				if ((Object) lbeneotorgado != null) {

					if ((Object) posicion != null) {

						int tamanobeneotor = lbeneotorgado.size();
						int iPosicion = Integer.parseInt(posicion.trim());
						for (int j = 0; j < tamanobeneotor; j++) {
							if (j == iPosicion) {
								RepBeneficioOtorgadoVO objRBOVO = new RepBeneficioOtorgadoVO();
								objRBOVO = (RepBeneficioOtorgadoVO) lbeneotorgado
										.get(j);
								session.setAttribute("fechaInicial",
										objRBOVO.getDesde());
								session.setAttribute("fechaFinal",
										objRBOVO.getHasta());
								strCodSede = objRBOVO.getCodeSede() + "";
								break;
							}
						}
					}
				}

				// Long cont;

				Object obAccion = (Object) request.getParameter("accion");
				Collection coFiltrado = (Collection) session
						.getAttribute("ListaFiltrado");

				if ((Object) coFiltrado != null) {
					String strCodigo = request.getParameter("codigos");

					if ((Object) strCodigo != null && !strCodigo.equals("")) {
						lFiltrado = (List<CondicionConsultaVO>) session
								.getAttribute("ListaFiltrado");

						int index = Integer.parseInt(strCodigo);
						int count = 1;
						Iterator<CondicionConsultaVO> it = lFiltrado.iterator();
						while (it.hasNext()) {
							it.next();
							if (index == count) {
								it.remove();
								break;
							} else {
								count++;
							}
						}
					}
				}

				session.setAttribute("generar", strCodsubpro);
				session.setAttribute("sede", strCodSede);
				List<RepAtributoVO> lListaAtributos = new LinkedList<RepAtributoVO>();

				try {
					String codigoSubprogramaStr = formBean.getGenerar();
					// String codigoSubprogramaStr2 =
					// request.getParameter("codigoSubprograma");
					lListaAtributos = (List<RepAtributoVO>) repBeneficioOtorgadoServiceImpl2
							.findAtributoEspecificos(new Long(
									codigoSubprogramaStr));
					session.setAttribute("listaatributos", lListaAtributos);
				} catch (DAOException e) {
					SUBException.logDebugError("", e);
				}
			}
		}

		if (formBean.getOperacion() != null
				&& formBean.getOperacion().equals(Utility.OP_GENERAR_REPORTE)) {
			System.out.println("form.generar." + formBean.getGenerar());
			List lFiltros = new LinkedList();
			List<RepAtributoVO> lBeneficiario = new LinkedList<RepAtributoVO>();
			List<RepAtributoVO> lAtributos = new LinkedList<RepAtributoVO>();

			List<RepAtributoVO> lEspecificos = new LinkedList<RepAtributoVO>();
			// List<RepAtributoVO> lGenerales = new LinkedList<RepAtributoVO>();

			lFiltros = (List) session.getAttribute("ListaFiltrado");
			session.setAttribute("listafiltros", lFiltros);
			lBeneficiario = (List<RepAtributoVO>) session
					.getAttribute("listabeneficiario");

			lAtributos = (List<RepAtributoVO>) session
					.getAttribute("listaatributos");

			// session.setAttribute("listageneral", lGenerales);
			session.removeAttribute("listaAtrEspecificosRepDetEmpresa");
			if ((Object) lAtributos != null) {
				int tamano = lAtributos.size();
				for (int i = 0; i < tamano; i++) {
					RepAtributoVO repatriVO = (RepAtributoVO) lAtributos.get(i);
					String valor = "atributo" + i;
					String valor2 = request.getParameter(valor);
					if (valor2 != null) {
						RepAtributoVO repespecVO = new RepAtributoVO();
						repespecVO.setCodigo(repatriVO.getCodigo());
						repespecVO.setEtiqueta(repatriVO.getEtiqueta());
						lEspecificos.add(repespecVO);
					}
				}
				session.setAttribute("listaAtrEspecificosRepDetEmpresa",
						lEspecificos);
				formBean.setlEspecificos(lEspecificos);

			} else {
				session.setAttribute("msg",
						"Seleccione alguna opcion en la lista de beneficios");
			}
			formBean.setOperacion("");
			request.setAttribute("generar", formBean.getGenerar());
			System.out.println("generar: " + formBean.getGenerar());
			return mapping.findForward("ir");
		}
		formBean.setOperacion("");
		return mapping.findForward("success");

	}
}
